//
//  NSDate+Formatter.h
//  testObjc
//
//  Created by bianruifeng on 2020/7/1.
//  Copyright © 2020 test. All rights reserved.
//

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

/// 日期控件扩展
@interface NSDate (Formatter)

@property (nonatomic, assign, readonly) NSInteger year;   ///< 获取当前年份
@property (nonatomic, assign, readonly) NSInteger month;      ///< 获取当前月份
@property (nonatomic, assign, readonly) NSInteger day;    ///< 获取当前日份
@property (nonatomic, assign, readonly) NSInteger hour;   ///< 获取当前小时
@property (nonatomic, assign, readonly) NSInteger minute;     ///< 获取当前分钟
@property (nonatomic, assign, readonly) NSInteger seconds;    ///< 获取当前秒数
@property (nonatomic, assign, readonly) NSInteger weekday;    ///< 获取当前星期

/**
 * 获取当天零点的时间
 */
- (NSDate *)zeroOfDate;
/**
* 获取当前年份
*/
- (NSInteger)getYear;
/**
* 获取当前月份
*/
- (NSInteger)getMonth;
/**
 * 获取当前日份
 */
- (NSInteger)getDay;

/**
*  当前日期字符串
*
*  例如：YYYY-MM-dd HH:mm:ss
*/
- (NSString *)formatDateString;
/**
 *  当前日期字符串
 *
 *  例如：YYYY-MM-dd HH:mm:ss
 */
+ (NSString *)currentDateString;
/**
 * 将时间字符串 格式化输出指定格式
 *
 * 输入 Mar 20, 2019 2:40:00 PM
 * 输出 2019-01-01 00:00:00
 */
+ (NSString *)formatDate:(NSString *)dateStr withFormatString:(NSString *)formatStr;


/**
* NSString转成NSString
*
* @param originalString 原始字符串
* @param originalFormat 原始DateFormatter
* @param toFormat 目标DateFormatter
*/
+ (NSString *)stringFromOriginalString:(NSString *)originalString originalFormat:(NSString *)originalFormat toFormat:(NSString *)toFormat;

+(void)test;
/**
*  把日期字符串 格式化成日期
*
*/
+(NSDate *)dateWithDateString:(NSString *)dateString;

/// 日期字符串格式化成日期
/// @param dateStr 日期字符串
/// @param format 日期字符串格式
+(NSDate *)dateWithDateStr:(NSString *)dateStr format:(NSString *)format;
/**
 *  把日期 格式化输出指定 格式（"yyyy-MM-dd HH:mm:ss"）的日期字符串
 *
 */
+(NSString *)dateStrWithDate:(NSDate *)date format:(NSString *)format;
/**
 *  把日期字符串 格式化输出指定 格式（yyyy_MM_dd_HH_mm_ss）的日期
 *
 */
+(NSDate *)dateWithFormat_yyyy_MM_dd_HH_mm_ss_string:(NSString *)string;
+(NSDate *)dateWithFormat_yyyy_MM_dd_HH_mm_string:(NSString *)string;
+(NSDate *)dateWithFormat_yyyy_MM_dd_HH_string:(NSString *)string;
+(NSDate *)dateWithFormat_yyyy_MM_dd_string:(NSString *)string;
+(NSDate *)dateWithFormat_yyyy_MM_string:(NSString *)string;


/// 获取今年所有的周
- (NSArray *)getAllWeekDate;

/// 获取当前时间若干年、月、日之后的时间
/// @param date 相对于当前时间，指定时差之后的时间
/// @param years 年
/// @param months 月
/// @param days 日
+ (NSDate *)dateWithFromDate:(NSDate *)date years:(NSInteger)years months:(NSInteger)months days:(NSInteger)days;
/**
 * @method
 *
 * @brief 获取两个日期之间的天数
 * @param fromDate       起始日期
 * @param toDate         终止日期
 * @return    总天数
 */
+ (NSInteger)numberOfDaysWithFromDate:(NSDate *)fromDate toDate:(NSDate *)toDate;

/// NSCalendar自带方法判断日期是否是今天
/// @param string 日期字符串@"yyyy-MM-dd"
+ (NSString *)checkTheDate:(NSString *)string;

/// 判断日期是星期几
/// @param date date
- (NSString *)weekdayStringWithDate:(NSDate *)date;
/**
 比较两个日期的大小 0 相等； 1 后者大于前者; -1 前者大于后者
 日期格式请传入：2013-08-05 12:12:12；如果修改日期格式，比如：2013-08-05，则将[df setDateFormat:@"yyyy-MM-dd HH:mm:ss"];修改为[dateformater setDateFormat:@"yyyy-MM-dd"];
 @param aDate 日期A
 @param bDate 日期B
 @return 0 相等； 1 B > A; -1 A > B
 */
+ (NSInteger)compareWithADate:(NSString*)aDate bDate:(NSString*)bDate ;
/**
 获取指定日期的周一 和 周末的日期

 @param date 某一日期
 @return @“10.13-10.19”
 */
+ (NSString *)weekTimeForDate:(NSDate *)date ;
 

//获取日期格式对象

- (NSDateFormatter *)dateFormatter;
/**
 * 随机产生一个1800至2099年间的时间字符串
 *
 * @return String  例： 1850-07-21 03:22:25
 */
+ (NSString *)randomDateStr;
@end

NS_ASSUME_NONNULL_END
